home *** CD-ROM | disk | FTP | other *** search
/ Revolution - Das Atari CD Magazin 1997 / Revolution - Das Atari CD Magazin 1.iso / software / anwendng / utility / cbhd502 / src / c / include / scsidrv / scsi.h next >
C/C++ Source or Header  |  1997-01-21  |  10KB  |  337 lines

  1. /*{{{}}}*/
  2. /*********************************************************************
  3.  *
  4.  * SCSI-Aufrufe für alle Geräte
  5.  *
  6.  * $Source: u:\k\usr\src\scsi\cbhd\rcs\scsi.h,v $
  7.  *
  8.  * $Revision: 1.2 $
  9.  *
  10.  * $Author: Steffen_Engel $
  11.  *
  12.  * $Date: 1996/02/14 11:33:52 $
  13.  *
  14.  * $State: Exp $
  15.  *
  16.  **********************************************************************
  17.  * History:
  18.  *
  19.  * $Log: scsi.h,v $
  20.  * Revision 1.2  1996/02/14  11:33:52  Steffen_Engel
  21.  * keine globalen Kommandostrukturen mehr
  22.  *
  23.  * Revision 1.1  1995/11/28  19:14:14  S_Engel
  24.  * Initial revision
  25.  *
  26.  *
  27.  *
  28.  *********************************************************************/
  29.  
  30. #ifndef __SCSI_H
  31. #define __SCSI_H
  32.  
  33. #include <portab.h>
  34. #include <scsidrv/scsidefs.h>           /* Typen für SCSI-Lib */
  35.  
  36.  
  37. /*****************************************************************************
  38.  * Konstanten
  39.  *****************************************************************************/
  40.  
  41. #define DIRECTACCESSDEV  0       /* Gerät mit Direktzugriff (Festplatte) */
  42. #define SEQACCESSDEV     1       /*   "    "  seq. Zugriff  (Streamer)   */
  43. #define PRINTERDEV       2       /* Drucker                              */
  44. #define PROCESSORDEV     3       /* Hostadapter                          */
  45. #define WORMDEV          4       /* WORM-Laufwerk                        */
  46. #define ROMDEV           5       /* nur-lese Laufwerk (CD-ROM)           */
  47. #define SCANNERDEF       6       /* Scanner                              */
  48. #define OPTICALMEMDEV    7       /* optical memory device                */
  49. #define MEDIUMCHNGDEV    8       /* medium changer device (zB JukeBox)   */
  50. #define COMMDEV          9       /* Communicationdevice                  */
  51. #define GRAPHDEV1       10
  52. #define GRAPHDEV2       11
  53. #define UNKNOWNDEV      31
  54.  
  55.  
  56. /*
  57.         SCSI opcodes
  58. */
  59.  
  60. #define TEST_UNIT_READY         0x00
  61. #define REZERO_UNIT             0x01
  62. #define REQUEST_SENSE           0x03
  63. #define FORMAT_UNIT             0x04
  64. #define READ_BLOCK_LIMITS       0x05
  65. #define REASSIGN_BLOCKS         0x07
  66. #define READ_6                  0x08
  67. #define WRITE_6                 0x0a
  68. #define SEEK_6                  0x0b
  69. #define READ_REVERSE            0x0f
  70. #define WRITE_FILEMARKS         0x10
  71. #define SPACE                   0x11
  72. #define INQUIRY                 0x12
  73. #define RECOVER_BUFFERED_DATA   0x14
  74. #define MODE_SELECT             0x15
  75. #define RESERVE                 0x16
  76. #define RELEASE                 0x17
  77. #define COPY                    0x18
  78. #define ERASE                   0x19
  79. #define MODE_SENSE              0x1a
  80. #define START_STOP              0x1b
  81. #define RECEIVE_DIAGNOSTIC      0x1c
  82. #define SEND_DIAGNOSTIC         0x1d
  83. #define ALLOW_MEDIUM_REMOVAL    0x1e
  84.  
  85. #define SET_WINDOW              0x24
  86. #define READ_CAPACITY           0x25
  87. #define READ_10                 0x28
  88. #define WRITE_10                0x2a
  89. #define SEEK_10                 0x2b
  90. #define WRITE_VERIFY            0x2e
  91. #define VERIFY                  0x2f
  92. #define SEARCH_HIGH             0x30
  93. #define SEARCH_EQUAL            0x31
  94. #define SEARCH_LOW              0x32
  95. #define SET_LIMITS              0x33
  96. #define PRE_FETCH               0x34
  97. #define READ_POSITION           0x34
  98. #define SYNCHRONIZE_CACHE       0x35
  99. #define LOCK_UNLOCK_CACHE       0x36
  100. #define READ_DEFECT_DATA        0x37
  101. #define MEDIUM_SCAN             0x38
  102. #define COMPARE                 0x39
  103. #define COPY_VERIFY             0x3a
  104. #define WRITE_BUFFER            0x3b
  105. #define READ_BUFFER             0x3c
  106. #define UPDATE_BLOCK            0x3d
  107. #define READ_LONG               0x3e
  108. #define WRITE_LONG              0x3f
  109. #define CHANGE_DEFINITION       0x40
  110. #define WRITE_SAME             0x41
  111. #define LOG_SELECT              0x4c
  112. #define LOG_SENSE               0x4d
  113. #define MODE_SELECT_10          0x55
  114. #define MODE_SENSE_10           0x5a
  115. #define WRITE_12                0xaa
  116. #define WRITE_VERIFY_12         0xae
  117. #define SEARCH_HIGH_12          0xb0
  118. #define SEARCH_EQUAL_12         0xb1
  119. #define SEARCH_LOW_12           0xb2
  120. #define SEND_VOLUME_TAG         0xb6
  121.  
  122.  
  123. /*****************************************************************************
  124.  * Typen
  125.  *****************************************************************************/
  126.  
  127. /* Inquiry-Struktur */
  128. typedef struct
  129. {
  130.   UCHAR Device;
  131.   UCHAR Qualifier;
  132.   UCHAR Version;
  133.   UCHAR Format;
  134.   UCHAR AddLen;
  135.   UCHAR Res1;
  136.   UWORD Res2;
  137.   char  Vendor[8];
  138.   char  Product[16];
  139.   char  Revision[4];
  140. }tInqData;
  141.  
  142. /* Modesense/select-Typen */
  143.  
  144. /* Pages für CD-ROMS */
  145. /* {{{ */
  146. typedef struct{
  147.   BYTE CDP0DRes2;
  148.   BYTE InactTMul;      /* unteres Nibble */
  149.   UWORD SperMSF;
  150.   UWORD FperMSF;
  151. }tCDPage0D;
  152.  
  153. typedef struct {
  154.   UBYTE ImmedFlags;
  155.   BYTE CD0ERes3;
  156.   BYTE CD0ERes4;
  157.   UBYTE LBAFlags;
  158.   UWORD BlocksPerSecond;
  159.     /* Genau:
  160.      *   LBAFlags MOD 10H = 0 -> BlocksPerSecond
  161.      *   LBAFlags MOD 10H = 8 -> 256 * BlocksPerSecond
  162.      */
  163.   UBYTE Port0Channel;
  164.   UBYTE Port0Volume;
  165.   UBYTE Port1Channel;
  166.   UBYTE Port1Volume;
  167.   UBYTE Port2Channel;
  168.   UBYTE Port2Volume;
  169.   UBYTE Port3Channel;
  170.   UBYTE Port3Volume;
  171. }tCDPage0E;
  172. /* }}} */
  173.  
  174. /* allgmeine Struktur für ModeSense/Select */
  175. typedef struct{
  176.   BYTE ModeLength;
  177.   BYTE MediumType;
  178.   UBYTE DeviceSpecs;  /* Geräteabhängig */
  179.   BYTE BlockDescLen;
  180. } tParmHead;
  181.  
  182. typedef struct{
  183.   ULONG Blocks;                  /* Byte HH = DensityCode */
  184.   ULONG BlockLen;                /* Byte HH = Reserved    */
  185. } tBlockDesc;
  186.  
  187. /* die Varianten für die Pages */
  188. typedef union{
  189.   tCDPage0D CDP0D;
  190.   tCDPage0E CDP0E;
  191. } tPage;
  192.  
  193. typedef struct{
  194.   tParmHead ParmHead;
  195.   tBlockDesc BlockDesc;
  196.   tPage Page;
  197. } tModePage;
  198.  
  199.  
  200. /*****************************************************************************
  201.  * Variablen
  202.  *****************************************************************************/
  203. GLOBAL long ScsiFlags;   /* Wert für tScsiCmd.Flags */
  204.  
  205.  
  206. /*****************************************************************************
  207.  * Funktionen
  208.  *****************************************************************************/
  209.  
  210. LONG TestUnitReady(void);
  211.  
  212.  
  213. LONG Inquiry(void  *data, BOOLEAN Vital, UWORD VitalPage, WORD length);
  214.   /* Inquiry von einem Gerät abholen */
  215.  
  216. #define MODESEL_SMP 0x01            /* Save Mode Parameters */
  217. #define MODESEL_PF  0x10            /* Page Format          */
  218.  
  219. LONG ModeSelect(UWORD        SelectFlags,
  220.                 void        *Buffer,
  221.                 UWORD        ParmLen);
  222.  
  223. #define MODESENSE_CURVAL 0          /* current values     */
  224. #define MODESENSE_CHANGVAL 1        /* changeable values  */
  225. #define MODESENSE_DEFVAL 2          /* default values     */
  226. #define MODESENSE_SAVEDVAL 3        /* save values        */
  227.  
  228. LONG ModeSense(UWORD     PageCode,
  229.                UWORD     PageControl,
  230.                void     *Buffer,
  231.                UWORD     ParmLen);
  232.  
  233.  
  234. LONG PreventMediaRemoval(BOOLEAN Prevent);
  235.  
  236.  
  237. BOOLEAN init_scsi (void);
  238.   /* Initialisierung des Moduls */
  239.  
  240.  
  241.  
  242. /*-------------------------------------------------------------------------*/
  243. /*-                                                                       -*/
  244. /*- Allgemeine Tools                                                      -*/
  245. /*-                                                                       -*/
  246. /*-------------------------------------------------------------------------*/
  247. void SuperOn(void);
  248.  
  249. void SuperOff(void);
  250.  
  251. void Wait(ULONG Ticks);
  252.  
  253. void SetBlockSize(ULONG NewLen);
  254.   /*
  255.    * SetBlockLen legt die Blocklänge für das SCSI-Gerät fest
  256.    * (normalerweise 512 Bytes).
  257.    */
  258.  
  259. ULONG GetBlockSize();
  260.   /*
  261.    * GetBlockLen gibt die aktuell eingestellte Blocklänge zurück.
  262.    */
  263.  
  264.  
  265. void SetScsiUnit(tHandle handle, WORD Lun, ULONG MaxLen);
  266.   /*
  267.    * SetScsiUnit legt das Gerät fest an das die nachfolgenden Kommandos
  268.    * gesendet werden und wie lang die Transfers maximal sein dürfen.
  269.    */
  270.  
  271.  
  272. /*-------------------------------------------------------------------------*/
  273. /*-                                                                       -*/
  274. /*- Zugriff für Submodule (ScsiStreamer, ScsiCD, ScsiDisk...)             -*/
  275. /*-                                                                       -*/
  276. /*-------------------------------------------------------------------------*/
  277.  
  278. typedef struct
  279. {
  280.   UBYTE     Command;
  281.   BYTE      LunAdr;
  282.   UWORD     Adr;
  283.   UBYTE     Len;
  284.   BYTE      Flags;
  285. }tCmd6;
  286.  
  287. typedef struct
  288. {
  289.   UBYTE     Command;
  290.   BYTE      Lun;
  291.   ULONG     Adr;
  292.   BYTE      Reserved;
  293.   UBYTE     LenHigh;
  294.   UBYTE     LenLow;
  295.   BYTE      Flags;
  296. }tCmd10;
  297.  
  298. typedef struct
  299. {
  300.   UBYTE     Command;
  301.   BYTE      Lun;
  302.   ULONG     Adr;
  303.   ULONG     Len;
  304.   BYTE      Reserved;
  305.   BYTE      Flags;
  306. }tCmd12;
  307.  
  308.  
  309. GLOBAL ULONG    BlockLen;
  310. GLOBAL ULONG    MaxDmaLen;
  311. GLOBAL UWORD    LogicalUnit;
  312.  
  313. void SetCmd6(tCmd6 *Cmd,
  314.              UWORD Opcode,
  315.              ULONG BlockAdr,
  316.              UWORD TransferLen);
  317.  
  318. void SetCmd10(tCmd10 *Cmd,
  319.               UWORD Opcode,
  320.               ULONG BlockAdr,
  321.               UWORD TransferLen);
  322.          
  323. void SetCmd12(tCmd12 *Cmd,
  324.               UWORD Opcode,
  325.               ULONG BlockAdr,
  326.               ULONG TransferLen);
  327.  
  328. tpSCSICmd SetCmd(BYTE    *Cmd,
  329.                  WORD     CmdLen,
  330.                  void    *Buffer,
  331.                  ULONG    Len,
  332.                  ULONG   TimeOut);
  333.  
  334.  
  335. #endif
  336.  
  337.